今天要來介紹,Typescript 特有的類型 Tuple
、 Enum
,到底會是什麼,有趣的地方會是哪些呢?
初步看到 Tuple
時,覺得這不就是 Array
嗎?心裡暗自竊喜了一下,不過 JavaScript 就有 Array
了,為何 TypeScript 還要新增一個呢? 但相較下去發現,原來沒那麼單純,如下
正常我們在定義 Array
會是這樣
let testArray: (number | string)[];
testArray = ['CY', 28]
console.log(testArray) // ['CY', 28]
但是如果是用 Tuple
,會有以下的狀況
當我們定義好型別,預設值給與空陣列時,TypeScript 就會進一步提醒我們,不能這樣做,哇~第一步就給個震撼彈!
let testArray: [number, string] = [];
接下來賦值,第一個元素給予字串,再次得到 TypeScript 的關愛。
let testArray: [number, string];
testArray = ['28', 'CY']
有發現了什麼嗎?
沒有錯,Tuple
相較 Array
更加嚴格,因此不管是型別或者是位子都必須按照當初註解的規則走,很強硬,但是對需要帶入固定元素的陣列,起了一個很大的保護。
有沒有覺得 Tuple
跟 Array
很像,只是比較嚴格一點,再來一發好消息,就是也可以使用 Array
的方法,例如 push
、concat
等。
我們試著使用 push
let testArray: [number, string] = [28, 'CY'];
testArray.push('will', 26)
console.log(testArray) //[ 28, 'CY', 'will', 26 ]
這邊發現如果是用 push
是可以將元素直接添加進去,而不會報錯,但是直接賦值是必須按照一開始註記的型別和元素數量規則走。
複習一下,陣列和元組的差別。
陣列 => 只要符合一開始的元素型註記的規則,例如:let test: (string|number)
,元素就必須是 string
和 number
,其餘元素的數量和順序就沒有限制。
元組 => 必須元素數量固定,每個元素型別也要完全一樣。
今天到此,明天將帶來另一個擴充型別 列舉(Enum)
,期待明日~